package com.itheima.edu.manager.dao;

import com.itheima.edu.manager.domain.Teacher;

import java.util.ArrayList;

/*
    库管类专门负责处理数据.
        1. 接收业务员传过来的业务数据
        2. 将数据拿到系统数据仓库中进行增删改查
        3. 将处理的结果给到业务员
 */
public class OtherTeacherDao implements BaseTeacherDao {
    //1.定义一个系统数据仓库: 集合实现
   private static ArrayList<Teacher> stus = new ArrayList<>();

    //静态代码块:随着类的加载而加载,自动执行!
    //作用:一般都会用来做数据的初始化,系统配置的加载!
    static {
        System.out.println("--------系统数据加载中Loading--------");
        Teacher tea1 = new Teacher("heima001", "柳岩", "36", "1999-11-11");
        Teacher tea2 = new Teacher("heima002", "杨幂", "32", "1999-11-11");
        //将学生对象存入数组容器
        stus.add(tea1);
        stus.add(tea2);
    }

    //库管类中的添加老师功能
    public boolean addTeacher(Teacher tea) {
        stus.add(tea);
        //2.返回true,表示添加成功
        return true;
    }

    //库管类中的查看老师功能
    public Teacher[] findAllTeacher() {
        //将集合转成数组返回
        //1.定义一个数组
        Teacher[] teaArray = new Teacher[stus.size()];

        //2.遍历集合,将每一个元素复制到数组中
        for (int i = 0; i < stus.size(); i++) {
            Teacher tea = stus.get(i);
        }
        return teaArray;
    }

    //库管类中的删除老师功能
    public boolean deleteTeacher(String deleteId) {
        //1.找到本次要删除的学号所对应的老师对象在数组中所对应的索引位置
        int index = getIndex(deleteId);

        //2.根据index的值来决定是否删除成功
        if (index == -1) {
            //说明传过来的工号在系统里不存在,直接返回false表示删除失败
            return false;
        } else {
            //不是-1说明传过来的工号在系统中存在,将值替换位null
            stus.add(index, null);
            return true;
        }
    }

    //封装一个根据学号查找老师对象在数组中的索引位置的方法
    public int getIndex(String id) {
        //先假设学号不存在
        int index = -1;
        //遍历数组
        for (int i = 0; i < stus.size(); i++) {
            //取出数组中的每一个元素
            Teacher tea = stus.get(i);
            //当前索引位置的元素不为null并且该元素的工号要和修改的工号一致时,修改标记
            if (tea != null && tea.getId().equals(id)) {
                //修改标记,记录当前老师对象的索引值
                index = i;
                break;
            }
        }
        //返回索引值
        return index;
    }

    //库管类中的修改老师功能
    public boolean updateTeacher(String updateId, Teacher newTea) {
        //1.根据要修改的工号找到对应的老师在数组中的索引位置
        int index = getIndex(updateId);

        //2.拿新的老师对象去替换该索引位置的老对象,从而达到修改目的
        stus.set(index, newTea);
        return true;
    }
}
